home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / SWAG / SWAGA_C / CURSOR.SWG / 0019_Very GOOD Cursor Unit.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  5KB  |  225 lines

  1. {
  2. From: JON JASIUNAS
  3. Subj: Cursor Stuff
  4.  
  5. Here's a bit of code that will hide / unhide the cursor, without using
  6. assembler: }
  7.  
  8. uses
  9.   Dos;
  10.  
  11. var
  12.   R: Registers;
  13.  
  14. procedure HideCursor;
  15. begin   { HideCursor }
  16.   R.AH := $03;    {- Current cursor status }
  17.   Intr($10, R);
  18.   R.AH := $01;    {- Set cursor }
  19.   R.CH := R.Ch or $20;
  20.   Intr($10, R);
  21. end;    { HideCursor }
  22.  
  23. procedure ShowCursor;
  24. begin   { ShowCursor }
  25.   R.AH := $03;
  26.   Intr($10, R);
  27.   R.AH := $01;
  28.   R.CH := R.CH and $1F;
  29.   Intr($10, R);
  30. end;    { ShowCursor }
  31.  
  32. { However, if you want to use assembler, you can, and you don't need the
  33.   DOS unit.  Here's my Cursor modification unit (in assembler), if you're
  34.   interested. }
  35.  
  36. {****************************
  37.  *     CURSOR.PAS v1.0      *
  38.  *                          *
  39.  *  General purpose cursor  *
  40.  *  manipulation routines   *
  41.  ****************************
  42.  
  43. 1992-93 - HyperDrive Software
  44. Released into the Public Domain.}
  45.  
  46. {$S-,R-,D-}
  47. {$IFOPT O+}
  48.   {$F+}
  49. {$ENDIF}
  50.  
  51. unit Cursor;
  52.  
  53. {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
  54.                                    interface
  55. {/////////////////////////////////////////////////////////////////////////////}
  56.  
  57. const
  58.   csLine  = $01;
  59.   csHalf  = $02;
  60.   csBlock = $03;
  61.  
  62. procedure DefineCursor(Size: Byte);
  63. procedure GotoXy(X, Y: Byte);
  64. procedure RestoreCursor;
  65. procedure HideCursor;
  66. procedure ShowCursor;
  67. function  CursorHidden: Boolean;
  68.  
  69. {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
  70.                                  implementation
  71. {/////////////////////////////////////////////////////////////////////////////}
  72.  
  73. var
  74.   dcStart, dcEnd: Byte;
  75.  
  76. {=============================================================================}
  77.  
  78. procedure DefineCursor(Size: Byte);  ASSEMBLER;
  79. asm     { DefineCursor }
  80.   mov   AH, $0F
  81.   int   $10
  82.   cmp   AL, $07
  83.   jne   @Color
  84.  
  85. @Mono:
  86.   mov   AH, $03
  87.   int   $10
  88.   cmp   Size, csLine
  89.   je    @MonoL
  90.   cmp   Size, csHalf
  91.   je    @MonoH
  92.   cmp   Size, csBlock
  93.   je    @MonoB
  94. @MonoL:
  95.   mov   CH, $0C
  96.   jmp   @MonoDone
  97. @MonoH:
  98.   mov   CH, $07
  99.   jmp   @MonoDone
  100. @MonoB:
  101.   mov   CH, $00
  102. @MonoDone:
  103.   mov   CL, $0D
  104.   jmp   @Done
  105.  
  106. @Color:
  107.   mov   AH, $03
  108.   int   $10
  109.   cmp   Size, csLine
  110.   je    @ColorL
  111.   cmp   Size, csHalf
  112.   je    @ColorH
  113.   cmp   Size, csBlock
  114.   je    @ColorB
  115. @ColorL:
  116.   mov   CH, $06
  117.   jmp   @ColorDone
  118. @ColorH:
  119.   mov   CH, $04
  120.   jmp   @ColorDone
  121. @ColorB:
  122.   mov   CH, $00
  123. @ColorDone:
  124.   mov   CL, $07
  125.  
  126. @Done:
  127.   mov   AH, $01
  128.   int   $10
  129. end;    { DefineCursor }
  130.  
  131. {-----------------------------------------------------------------------------}
  132.  
  133. procedure GotoXy(X, Y: Byte);  ASSEMBLER;
  134. asm     { GotoXy }
  135.   mov   AH, $0F
  136.   int   $10
  137.   mov   AH, $02
  138.   dec   Y
  139.   mov   DH, Y
  140.   dec   X
  141.   mov   DL, X
  142.   int   $10
  143. end;    { GotoXy }
  144.  
  145. {-----------------------------------------------------------------------------}
  146.  
  147. procedure RestoreCursor;  ASSEMBLER;
  148. asm     { RestoreCursor }
  149.   mov   AH, $01
  150.   mov   CH, dcStart
  151.   mov   CL, dcEnd
  152.   int   $10
  153. end;    { RestoreCursor }
  154.  
  155. {-----------------------------------------------------------------------------}
  156.  
  157. procedure HideCursor;  ASSEMBLER;
  158. asm     { HideCursor }
  159.   mov   AH, $03
  160.   int   $10
  161.   mov   AH, $01
  162.   or    CH, $20
  163.   int   $10
  164. end;    { HideCursor }
  165.  
  166. {-----------------------------------------------------------------------------}
  167.  
  168. procedure ShowCursor;  ASSEMBLER;
  169. asm     { ShowCursor }
  170.   mov   AH, $03
  171.   int   $10
  172.   mov   AH, $01
  173.   and   CH, $1F
  174.   int   $10
  175. end;    { ShowCursor }
  176.  
  177. {-----------------------------------------------------------------------------}
  178.  
  179. function  CursorHidden: Boolean; ASSEMBLER;
  180. asm     { CursorHidden }
  181.  
  182.   mov   AH, $03
  183.   int   $10
  184.   cmp   CH, $20
  185.   je    @Hidden
  186.   mov   AL, $00
  187.   jmp   @End
  188. @Hidden:
  189.   mov   AL, $01;
  190. @End:
  191. end;    { CursorHidden }
  192.  
  193. {-----------------------------------------------------------------------------}
  194.                                 {** PRIVATE **}
  195. {-----------------------------------------------------------------------------}
  196.  
  197. procedure SaveCursor;  ASSEMBLER;
  198. asm     { SaveCursor }
  199.   mov   AH, $03
  200.   int   $10
  201.   mov   dcStart, CH
  202.   mov   dcEnd, CL
  203. end;    { SaveCursor }
  204.  
  205. {=============================================================================}
  206. {$F+}
  207.  
  208. var
  209.   OldExitProc: Pointer;
  210.  
  211. procedure NewExitProc;
  212. begin
  213.   ExitProc := OldExitProc;
  214.   RestoreCursor;               {- Restore startup cursor mode }
  215. end;    { NewExitProc }
  216.  
  217. {$F-}
  218. {=============================================================================}
  219.  
  220. begin   { Cursor }
  221.   OldExitProc := ExitProc;
  222.   ExitProc    := @NewExitProc;
  223.   SaveCursor;                  {- Save startup cursor mode }
  224. end.    { Cursor }
  225.